The Microsoft.Net® framework is a new platform for building integrated, service-oriented, applications to meet the needs of today's and future Internet businesses. The .Net platform allows developers to take better advantage of technologies than any earlier Microsoft® platform. A .Net® application can be executed on any platform that supports the .Net® common language runtime (CLR). It is further possible that a version of the CLR be built for platforms other than Windows. The .Net® platform allows different programming languages to be integrated with one another. For example, it is possible to create a class in C++ that is derived from a class implemented in Visual Basic. The programming languages supported by the .Net platform include, but are not limited to, C++ with managed extensions, C-sharp (C#), Visual Basic, Pascal, COBOL, and many others. In order to allow the execution of these programming languages by the CLR, their source code compiled into Microsoft® intermediate language (MSIL) bytecodes.
The Java programming environment provided by Sun Microsystems® has recently gained popularity. The Java programming language is a language that is designed to be portable enough so that it can be executed on a wide range of computers, ranging from small devices (e.g., cell phones and smart cards) up to supercomputers. Computer programs written in the Java programming language are compiled into Java bytecode instructions that are suitable for execution over a Java virtual machine (JVM).
New technologies have been developed to bridge the gap between the Java and the .Net® environments. Specifically, these technologies provide a compiler (hereinafter: the “IL2J compiler”) that compiles MSIL bytecodes into Java bytecodes, and thus allowing to execute software programs developed using the .Net framework over a JVM. This is performed by resolving semantic differences at compilation time and at runtime. An example for the intermediate language to Java (IL2J) compiler is disclosed in U.S. patent application Ser. No. 10/437,518 entitled “Compiler and Software Product for Compiling Intermediate Language Bytecodes into Java Bytecodes” assigned to common assignee and incorporated herein by reference for all that it contains.
However, when developing a computer program, debugging of the program code is one of the most difficult and time consuming tasks. Debugging of a computer program is often performed by means of debugging software (or “debugger”). The debugger detects a portion of a program that causes failures during execution, sets breakpoints in places in the program code that are of interest in respect of the status of certain variables, and executes the program code. When executing the debugger, a run-time environment of the program developing environment starts executing the program code, stops its execution when reaching the first breakpoint in the order of execution, and usually displays the content of the variables or expression for analysis. Also, a debugger can execute the program in a certain flow (e.g., step-by-step) and to display the stack content of the executed program.
To debug a program code produced by the IL2J compiler, there is a need for a debugger that finds failures in Java code using a set of debugging commands issued by a .Net® debugger. That is, such a debugger has to set breakpoints places in the .Net program code such that they appear at the appropriate location in the resultant Java code, translates .Net expressions to be evaluated to Java expressions, and translates the evaluated expression back to .Net® notation. Furthermore, such a debugger should support the debugging of multiple languages included the .Net® framework and to allow software developers to step through Java source code and follow the execution flow of the Java program.
In US Pat. Application No. 20040059961, Jentsch et al, disclose methods and systems for debugging a computer program code by using debugging software.
Software means may be provided for causing the debugging software to stop at a breakpoint set in the computer program code. In one embodiment disclosed by Jentsch, a method is provided that comprises making the debugging software stop at a breakpoint based on one or more pre-definable conditions.
Bogle et al, in U.S. Pat. No. 6,353,923, Active Debugging Environment for Debugging Mixed-Language Scripting Code, assigned to MicroSoft®, teaches an active debugging environment for debugging a virtual application that contains program language code from multiple compiled and/or interpreted programming languages. The active debugging environment is language neutral and host neutral, where the host is a standard content centric script host with language engines for each of the multiple compiled and/or interpreted programming languages represented in the virtual application.
The active debugging environment user interface can be of any debug tool interface design. The language neutral and host neutral active debugging environment is facilitated by a process debug manager that catalogs and manages application specific components, and a machine debug manager that catalogs and manages the various applications that comprise a virtual application being run by the script host. The process debug manager and the machine debug manager act as an interface between the language engine specific programming language details and the debug user interface. Thus, MicroSoft® provides a debugger for debugging virtual applications, where the code of these applications is the code that is being debugged.
It would therefore be advantageous to provide a debugger that debugs computer program at a source level code, written in any programming language supported by the .Net® platform, while the program is running on a Java virtual machine (JVM). It would be further advantageous if the provided debugger operates as part of an existing integrated development environment (IDE) tool. Further, it would be advantageous to provide a debugger for debugging applications written in one of the .Net programming languages (VB, C#, etc.) where the application code is executed over a Java runtime, i.e., where the resultant programming code being debugged is written in Java.